package com.example.keshe.Dao;

import java.util.List;
import java.util.concurrent.CompletableFuture;

/**
 * 接口定义了库存数据访问对象（Data Access Object）的操作。
 *
 * @param <T> 库存项的类型
 */
public interface InventoryDao<T> {

    /**
     * 根据分页信息获取库存项列表。
     *
     * @param pageIndex 页索引，从0开始
     * @param pageSize  每页的记录数
     * @return 库存项列表
     * @throws Exception 如果获取库存项列表时发生异常
     */
    List<T> selectByPage(int pageIndex, int pageSize) throws Exception;

    /**
     * 获取库存中的总记录数。
     *
     * @return 库存中的总记录数
     * @throws Exception 如果获取总记录数时发生异常
     */
    int getTotalRecords() throws Exception;

    /**
     * 异步添加库存项。
     *
     * @param inventory 要添加的库存项
     * @return 表示异步操作完成的 {@code CompletableFuture}
     */
    CompletableFuture<Void> addInventoryAsync(T inventory);

    /**
     * 异步删除库存项。
     *
     * @param inventory 要删除的库存项
     * @return 表示异步操作完成的 {@code CompletableFuture}
     */
    CompletableFuture<Void> deleteInventoryAsync(T inventory);

    /**
     * 计算在给定时间范围内特定库存项的总金额。
     *
     * @param clothingId 特定库存项的ID
     * @param startTime  计算开始时间
     * @param endTime    计算结束时间
     * @return 表示计算金额的 {@code CompletableFuture}
     */
    CompletableFuture<String> calculateMoney(String clothingId, String startTime, String endTime);

    /**
     * 异步计算在给定时间范围内所有库存项的总金额。
     *
     * @param startTime 计算开始时间
     * @param endTime   计算结束时间
     * @return 一个CompletableFuture，包含计算结果的字符串。如果计算成功，返回格式化的总金额字符串；如果没有符合条件的库存项记录，返回提示信息；如果发生异常，返回 null。
     */
    CompletableFuture<String> calculateAllTotalAmount(String startTime, String endTime);
}
